// Spatial Index Library
//
// Copyright (C) 2002  Navel Ltd.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
// Contact information:
//  Mailing address:
//    Marios Hadjieleftheriou
//    University of California, Riverside
//    Department of Computer Science
//    Surge Building, Room 310
//    Riverside, CA 92521
//
//  Email:
//    marioh@cs.ucr.edu
package org.geotools.caching.firstdraft.spatialindex.spatialindex;

import org.geotools.caching.firstdraft.spatialindex.storagemanager.PropertySet;


public interface ISpatialIndex {
    public void flush() throws IllegalStateException;

    public void insertData(final byte[] data, final IShape shape, int id);

    public boolean deleteData(final IShape shape, int id);

    public void containmentQuery(final IShape query, final IVisitor v);

    public void intersectionQuery(final IShape query, final IVisitor v);

    public void pointLocationQuery(final IShape query, final IVisitor v);

    public void nearestNeighborQuery(int k, final IShape query, final IVisitor v,
        INearestNeighborComparator nnc);

    public void nearestNeighborQuery(int k, final IShape query, final IVisitor v);

    public void queryStrategy(final IQueryStrategy qs);

    public PropertySet getIndexProperties();

    public void addWriteNodeCommand(INodeCommand nc);

    public void addReadNodeCommand(INodeCommand nc);

    public void addDeleteNodeCommand(INodeCommand nc);

    public boolean isIndexValid();

    public IStatistics getStatistics();
} // ISpatialIndex
